#!/usr/bin/env python3
# -*- coding: utf-8 -*-
"""
生成 Excel 格式的联系人数据文件
使用 openpyxl 库生成 .xlsx 文件
"""

try:
    from openpyxl import Workbook
    from openpyxl.styles import Font, Alignment
except ImportError:
    print("错误：需要安装 openpyxl 库")
    print("请运行: pip install openpyxl")
    exit(1)

import random

# 中文姓氏列表
surnames = ['张', '李', '王', '刘', '陈', '杨', '赵', '黄', '周', '吴', 
            '徐', '孙', '胡', '朱', '高', '林', '何', '郭', '马', '罗',
            '梁', '宋', '郑', '谢', '韩', '唐', '冯', '于', '董', '萧',
            '程', '曹', '袁', '邓', '许', '傅', '沈', '曾', '彭', '吕']

# 中文名字列表
first_names = ['伟', '芳', '娜', '秀英', '敏', '静', '丽', '强', '磊', '军',
               '洋', '勇', '艳', '杰', '娟', '涛', '明', '超', '秀兰', '霞',
               '平', '刚', '桂英', '建华', '文', '华', '红', '玉', '建国', '强',
               '敏', '桂芳', '秀华', '红梅', '红霞', '秀荣', '秀云', '秀梅', '秀芳', '秀英']

# 生成随机姓名
def generate_name():
    surname = random.choice(surnames)
    first_name = random.choice(first_names)
    return surname + first_name

# 生成随机手机号（11位，以1开头）
def generate_phone():
    prefixes = ['138', '139', '150', '151', '152', '153', '155', '156', '157', '158', '159',
                '130', '131', '132', '133', '134', '135', '136', '137',
                '180', '181', '182', '183', '184', '185', '186', '187', '188', '189']
    prefix = random.choice(prefixes)
    suffix = ''.join([str(random.randint(0, 9)) for _ in range(8)])
    return prefix + suffix

# 生成联系人数据
def generate_contacts(count):
    contacts = []
    for _ in range(count):
        contacts.append({
            'name': generate_name(),
            'phone': generate_phone()
        })
    return contacts

# 创建 Excel 文件
def create_excel_file(filename, contacts, has_header=True):
    wb = Workbook()
    ws = wb.active
    ws.title = "联系人"
    
    # 设置表头样式
    header_font = Font(bold=True, size=12)
    header_alignment = Alignment(horizontal='center', vertical='center')
    
    # 写入表头
    if has_header:
        ws['A1'] = '姓名'
        ws['B1'] = '手机号'
        ws['A1'].font = header_font
        ws['B1'].font = header_font
        ws['A1'].alignment = header_alignment
        ws['B1'].alignment = header_alignment
        start_row = 2
    else:
        start_row = 1
    
    # 写入数据
    for i, contact in enumerate(contacts, start=start_row):
        ws[f'A{i}'] = contact['name']
        ws[f'B{i}'] = contact['phone']
    
    # 调整列宽
    ws.column_dimensions['A'].width = 15
    ws.column_dimensions['B'].width = 15
    
    # 保存文件
    wb.save(filename)
    print(f"✓ 已生成: {filename} ({len(contacts)} 条联系人)")

# 主函数
def main():
    print("=" * 50)
    print("生成 Excel 联系人数据文件")
    print("=" * 50)
    
    # 生成多个不同大小的测试文件
    files = [
        ('示例联系人数据_小.xlsx', 10, True),
        ('示例联系人数据_中.xlsx', 50, True),
        ('示例联系人数据_大.xlsx', 200, True),
        ('示例联系人数据_无表头.xlsx', 30, False),
        ('示例联系人数据_测试.xlsx', 100, True),
    ]
    
    for filename, count, has_header in files:
        contacts = generate_contacts(count)
        create_excel_file(filename, contacts, has_header)
    
    print("\n" + "=" * 50)
    print("所有文件生成完成！")
    print("=" * 50)

if __name__ == '__main__':
    main()

